import { GraphQLScalarType } from 'graphql';
import * as mocks from './mocks.js';
import {
  GraphQLAccountNumber,
  GraphQLBigInt,
  GraphQLByte,
  GraphQLCountryCode,
  GraphQLCountryName,
  GraphQLCuid,
  GraphQLCuid2,
  GraphQLCurrency,
  GraphQLDate,
  GraphQLDateTime,
  GraphQLDateTimeISO,
  GraphQLDeweyDecimal,
  GraphQLDID,
  GraphQLDuration,
  GraphQLEmailAddress,
  GraphQLGeoJSON,
  GraphQLGUID,
  GraphQLHexadecimal,
  GraphQLHexColorCode,
  GraphQLHSL,
  GraphQLHSLA,
  GraphQLIBAN,
  GraphQLIP,
  GraphQLIPCPatent,
  GraphQLIPv4,
  GraphQLIPv6,
  GraphQLISBN,
  GraphQLISO8601Duration,
  GraphQLJSON,
  GraphQLJSONObject,
  GraphQLJWT,
  GraphQLLatitude,
  GraphQLLCCSubclass,
  GraphQLLocalDate,
  GraphQLLocalDateTime,
  GraphQLLocale,
  GraphQLLocalEndTime,
  GraphQLLocalTime,
  GraphQLLong,
  GraphQLLongitude,
  GraphQLMAC,
  GraphQLNegativeFloat,
  GraphQLNegativeInt,
  GraphQLNonEmptyString,
  GraphQLNonNegativeFloat,
  GraphQLNonNegativeInt,
  GraphQLNonPositiveFloat,
  GraphQLNonPositiveInt,
  GraphQLObjectID,
  GraphQLPhoneNumber,
  GraphQLPort,
  GraphQLPositiveFloat,
  GraphQLPositiveInt,
  GraphQLPostalCode,
  GraphQLRGB,
  GraphQLRGBA,
  GraphQLRoutingNumber,
  GraphQLSafeInt,
  GraphQLSemVer,
  GraphQLSESSN,
  GraphQLTime,
  GraphQLTimestamp,
  GraphQLTimeZone,
  GraphQLULID,
  GraphQLUnsignedFloat,
  GraphQLUnsignedInt,
  GraphQLURL,
  GraphQLUSCurrency,
  GraphQLUtcOffset,
  GraphQLUUID,
  GraphQLVoid,
} from './scalars/index.js';

export {
  Date as DateTypeDefinition,
  Time as TimeTypeDefinition,
  DateTime as DateTimeTypeDefinition,
  DateTimeISO as DateTimeISOTypeDefinition,
  Timestamp as TimestampTypeDefinition,
  TimeZone as TimeZoneTypeDefinition,
  UtcOffset as UtcOffsetTypeDefinition,
  LocalDate as LocalDateTypeDefinition,
  LocalTime as LocalTimeTypeDefinition,
  LocalDateTime as LocalDateTimeTypeDefinition,
  LocalEndTime as LocalEndTimeTypeDefinition,
  EmailAddress as EmailAddressTypeDefinition,
  NegativeFloat as NegativeFloatTypeDefinition,
  NegativeInt as NegativeIntTypeDefinition,
  NonEmptyString as NonEmptyStringTypeDefinition,
  NonNegativeFloat as NonNegativeFloatTypeDefinition,
  NonNegativeInt as NonNegativeIntTypeDefinition,
  NonPositiveFloat as NonPositiveFloatTypeDefinition,
  NonPositiveInt as NonPositiveIntTypeDefinition,
  PhoneNumber as PhoneNumberTypeDefinition,
  PositiveFloat as PositiveFloatTypeDefinition,
  PositiveInt as PositiveIntTypeDefinition,
  PostalCode as PostalCodeTypeDefinition,
  UnsignedFloat as UnsignedFloatTypeDefinition,
  UnsignedInt as UnsignedIntTypeDefinition,
  URL as URLTypeDefinition,
  BigInt as BigIntTypeDefinition,
  Byte as ByteTypeDefinition,
  Long as LongTypeDefinition,
  SafeInt as SafeIntDefinition,
  UUID as UUIDDefinition,
  GUID as GUIDDefinition,
  Hexadecimal as HexadecimalTypeDefinition,
  HexColorCode as HexColorCodeDefinition,
  HSL as HSLDefinition,
  HSLA as HSLADefinition,
  IP as IPDefinition,
  IPv4 as IPv4Definition,
  IPv6 as IPv6Definition,
  ISBN as ISBNDefinition,
  JWT as JWTDefinition,
  Latitude as LatitudeDefinition,
  Longitude as LongitudeDefinition,
  MAC as MACDefinition,
  Port as PortDefinition,
  RGB as RGBDefinition,
  RGBA as RGBADefinition,
  USCurrency as USCurrencyDefinition,
  Currency as CurrencyDefinition,
  JSON as JSONDefinition,
  JSONObject as JSONObjectDefinition,
  IBAN as IBANTypeDefinition,
  ObjectID as ObjectIDTypeDefinition,
  Void as VoidTypeDefinition,
  DID as DIDDefinition,
  Duration as DurationTypeDefinition,
  CountryCode as CountryCodeDefinition,
  Locale as LocaleDefinition,
  RoutingNumber as RoutingNumberDefinition,
  AccountNumber as AccountNumberDefinition,
  Cuid as CuidDefinition,
  SemVer as SemVerDefinition,
  SemVer as SESSNDefinition,
  DeweyDecimal as DeweyDecimalDefinition,
  LCCSubclass as LCCSubclassDefinition,
  IPCPatent as IPCPatentDefinition,
} from './typeDefs.js';

export { typeDefs } from './typeDefs.js';

export {
  GraphQLDate as DateResolver,
  GraphQLTime as TimeResolver,
  GraphQLDateTime as DateTimeResolver,
  GraphQLDateTimeISO as DateTimeISOResolver,
  GraphQLTimestamp as TimestampResolver,
  GraphQLTimeZone as TimeZoneResolver,
  GraphQLUtcOffset as UtcOffsetResolver,
  GraphQLDuration as DurationResolver,
  GraphQLISO8601Duration as ISO8601DurationResolver,
  GraphQLLocalDate as LocalDateResolver,
  GraphQLLocalTime as LocalTimeResolver,
  GraphQLLocalDateTime as LocalDateTimeResolver,
  GraphQLLocalEndTime as LocalEndTimeResolver,
  GraphQLEmailAddress as EmailAddressResolver,
  GraphQLNegativeFloat as NegativeFloatResolver,
  GraphQLNegativeInt as NegativeIntResolver,
  GraphQLNonEmptyString as NonEmptyStringResolver,
  GraphQLNonNegativeFloat as NonNegativeFloatResolver,
  GraphQLNonNegativeInt as NonNegativeIntResolver,
  GraphQLNonPositiveFloat as NonPositiveFloatResolver,
  GraphQLNonPositiveInt as NonPositiveIntResolver,
  GraphQLPhoneNumber as PhoneNumberResolver,
  GraphQLPositiveFloat as PositiveFloatResolver,
  GraphQLPositiveInt as PositiveIntResolver,
  GraphQLPostalCode as PostalCodeResolver,
  GraphQLUnsignedFloat as UnsignedFloatResolver,
  GraphQLUnsignedInt as UnsignedIntResolver,
  GraphQLURL as URLResolver,
  GraphQLBigInt as BigIntResolver,
  GraphQLByte as ByteResolver,
  GraphQLLong as LongResolver,
  GraphQLSafeInt as SafeIntResolver,
  GraphQLUUID as UUIDResolver,
  GraphQLGUID as GUIDResolver,
  GraphQLHexadecimal as HexadecimalResolver,
  GraphQLHexColorCode as HexColorCodeResolver,
  GraphQLHSL as HSLResolver,
  GraphQLHSLA as HSLAResolver,
  GraphQLIP as IPResolver,
  GraphQLIPv4 as IPv4Resolver,
  GraphQLIPv6 as IPv6Resolver,
  GraphQLISBN as ISBNResolver,
  GraphQLJWT as JWTResolver,
  GraphQLLatitude as LatitudeResolver,
  GraphQLLongitude as LongitudeResolver,
  GraphQLMAC as MACResolver,
  GraphQLPort as PortResolver,
  GraphQLRGB as RGBResolver,
  GraphQLRGBA as RGBAResolver,
  GraphQLUSCurrency as USCurrencyResolver,
  GraphQLCurrency as CurrencyResolver,
  GraphQLJSON as JSONResolver,
  GraphQLJSONObject as JSONObjectResolver,
  GraphQLIBAN as IBANResolver,
  GraphQLObjectID as ObjectIDResolver,
  GraphQLVoid as VoidResolver,
  GraphQLDID as DIDResolver,
  GraphQLCountryCode as CountryCodeResolver,
  GraphQLLocale as LocaleResolver,
  GraphQLRoutingNumber as RoutingNumberResolver,
  GraphQLAccountNumber as AccountNumberResolver,
  GraphQLCuid as CuidResolver,
  GraphQLSemVer as SemVerResolver,
  GraphQLSESSN as SESSNResolver,
  GraphQLDeweyDecimal as GraphQLDeweyDecimalResolver,
  GraphQLIPCPatent as GraphQLIPCPatentResolver,
};

export const resolvers: Record<string, GraphQLScalarType> = {
  AccountNumber: GraphQLAccountNumber,
  BigInt: GraphQLBigInt,
  Byte: GraphQLByte,
  CountryCode: GraphQLCountryCode,
  CountryName: GraphQLCountryName,
  Cuid: GraphQLCuid,
  Cuid2: GraphQLCuid2,
  Currency: GraphQLCurrency,
  Date: GraphQLDate,
  DateTime: GraphQLDateTime,
  DateTimeISO: GraphQLDateTimeISO,
  DeweyDecimal: GraphQLDeweyDecimal,
  DID: GraphQLDID,
  Duration: GraphQLDuration,
  EmailAddress: GraphQLEmailAddress,
  GeoJSON: GraphQLGeoJSON,
  GUID: GraphQLGUID,
  Hexadecimal: GraphQLHexadecimal,
  HexColorCode: GraphQLHexColorCode,
  HSL: GraphQLHSL,
  HSLA: GraphQLHSLA,
  IBAN: GraphQLIBAN,
  IP: GraphQLIP,
  IPCPatent: GraphQLIPCPatent,
  IPv4: GraphQLIPv4,
  IPv6: GraphQLIPv6,
  ISBN: GraphQLISBN,
  ISO8601Duration: GraphQLISO8601Duration,
  JSON: GraphQLJSON,
  JSONObject: GraphQLJSONObject,
  JWT: GraphQLJWT,
  Latitude: GraphQLLatitude,
  LCCSubclass: GraphQLLCCSubclass,
  LocalDate: GraphQLLocalDate,
  LocalDateTime: GraphQLLocalDateTime,
  Locale: GraphQLLocale,
  LocalEndTime: GraphQLLocalEndTime,
  LocalTime: GraphQLLocalTime,
  Long: GraphQLLong,
  Longitude: GraphQLLongitude,
  MAC: GraphQLMAC,
  NegativeFloat: GraphQLNegativeFloat,
  NegativeInt: GraphQLNegativeInt,
  NonEmptyString: GraphQLNonEmptyString,
  NonNegativeFloat: GraphQLNonNegativeFloat,
  NonNegativeInt: GraphQLNonNegativeInt,
  NonPositiveFloat: GraphQLNonPositiveFloat,
  NonPositiveInt: GraphQLNonPositiveInt,
  ObjectID: GraphQLObjectID,
  PhoneNumber: GraphQLPhoneNumber,
  Port: GraphQLPort,
  PositiveFloat: GraphQLPositiveFloat,
  PositiveInt: GraphQLPositiveInt,
  PostalCode: GraphQLPostalCode,
  RGB: GraphQLRGB,
  RGBA: GraphQLRGBA,
  RoutingNumber: GraphQLRoutingNumber,
  SafeInt: GraphQLSafeInt,
  SemVer: GraphQLSemVer,
  SESSN: GraphQLSESSN,
  Time: GraphQLTime,
  Timestamp: GraphQLTimestamp,
  TimeZone: GraphQLTimeZone,
  ULID: GraphQLULID,
  UnsignedFloat: GraphQLUnsignedFloat,
  UnsignedInt: GraphQLUnsignedInt,
  URL: GraphQLURL,
  USCurrency: GraphQLUSCurrency,
  UtcOffset: GraphQLUtcOffset,
  UUID: GraphQLUUID,
  Void: GraphQLVoid,
};

export {
  Date as DateMock,
  Time as TimeMock,
  DateTime as DateTimeMock,
  DateTimeISO as DateTimeISOMock,
  Duration as DurationMock,
  ISO8601Duration as ISO8601DurationMock,
  Timestamp as TimestampMock,
  TimeZone as TimeZoneMock,
  UtcOffset as UtcOffsetMock,
  LocalDate as LocalDateMock,
  LocalTime as LocalTimeMock,
  LocalDateTime as LocalDateTimeMock,
  LocalEndTime as LocalEndTimeMock,
  EmailAddress as EmailAddressMock,
  NegativeFloat as NegativeFloatMock,
  NegativeInt as NegativeIntMock,
  NonEmptyString as NonEmptyStringMock,
  NonNegativeFloat as NonNegativeFloatMock,
  NonNegativeInt as NonNegativeIntMock,
  NonPositiveFloat as NonPositiveFloatMock,
  NonPositiveInt as NonPositiveIntMock,
  PhoneNumber as PhoneNumberMock,
  PositiveFloat as PositiveFloatMock,
  PositiveInt as PositiveIntMock,
  PostalCode as PostalCodeMock,
  UnsignedFloat as UnsignedFloatMock,
  UnsignedInt as UnsignedIntMock,
  URL as URLMock,
  BigInt as BigIntMock,
  Byte as ByteMock,
  Long as LongMock,
  SafeInt as SafeIntMock,
  UUID as UUIDMock,
  GUID as GUIDMock,
  Hexadecimal as HexadecimalMock,
  HexColorCode as HexColorCodeMock,
  HSL as HSLMock,
  HSLA as HSLAMock,
  IP as IPMock,
  IPv4 as IPv4Mock,
  IPv6 as IPv6Mock,
  ISBN as ISBNMock,
  JWT as JWTMock,
  Latitude as LatitudeMock,
  Longitude as LongitudeMock,
  MAC as MACMock,
  Port as PortMock,
  RGB as RGBMock,
  RGBA as RGBAMock,
  USCurrency as USCurrencyMock,
  Currency as CurrencyMock,
  JSON as JSONMock,
  JSONObject as JSONObjectMock,
  IBAN as IBANMock,
  ObjectID as ObjectIDMock,
  Void as VoidMock,
  DID as DIDMock,
  CountryCode as CountryCodeMock,
  Locale as LocaleMock,
  RoutingNumber as RoutingNumberMock,
  AccountNumber as AccountNumberMock,
  Cuid as CuidMock,
  SemVer as SemVerMock,
  SESSN as SESSNMock,
  DeweyDecimal as DeweyDecimalMock,
  LCCSubclass as LCCSubclassMock,
  IPCPatent as IPCPatentMock,
} from './mocks.js';

export { mocks };

export {
  RegularExpression,
  RegularExpressionOptions,
  RegularExpressionErrorMessageFn,
} from './RegularExpression.js';

export {
  GraphQLDate,
  GraphQLTime,
  GraphQLDateTime,
  GraphQLDateTimeISO,
  GraphQLTimestamp,
  GraphQLTimeZone,
  GraphQLUtcOffset,
  GraphQLDuration,
  GraphQLISO8601Duration,
  GraphQLLocalDate,
  GraphQLLocalTime,
  GraphQLLocalDateTime,
  GraphQLLocalEndTime,
  GraphQLEmailAddress,
  GraphQLNegativeFloat,
  GraphQLNegativeInt,
  GraphQLNonEmptyString,
  GraphQLNonNegativeFloat,
  GraphQLNonNegativeInt,
  GraphQLNonPositiveFloat,
  GraphQLNonPositiveInt,
  GraphQLPhoneNumber,
  GraphQLPositiveFloat,
  GraphQLPositiveInt,
  GraphQLPostalCode,
  GraphQLUnsignedFloat,
  GraphQLUnsignedInt,
  GraphQLURL,
  GraphQLBigInt,
  GraphQLByte,
  GraphQLLong,
  GraphQLSafeInt,
  GraphQLUUID,
  GraphQLGUID,
  GraphQLHexadecimal,
  GraphQLHexColorCode,
  GraphQLHSL,
  GraphQLHSLA,
  GraphQLIP,
  GraphQLIPv4,
  GraphQLIPv6,
  GraphQLISBN,
  GraphQLJWT,
  GraphQLLatitude,
  GraphQLLongitude,
  GraphQLMAC,
  GraphQLPort,
  GraphQLRGB,
  GraphQLRGBA,
  GraphQLUSCurrency,
  GraphQLCurrency,
  GraphQLJSON,
  GraphQLJSONObject,
  GraphQLIBAN,
  GraphQLObjectID,
  GraphQLVoid,
  GraphQLDID,
  GraphQLCountryCode,
  GraphQLLocale,
  GraphQLRoutingNumber,
  GraphQLAccountNumber,
  GraphQLCuid,
  GraphQLSemVer,
  GraphQLSESSN,
  GraphQLDeweyDecimal,
  GraphQLLCCSubclass,
  GraphQLIPCPatent,
};

export { GeoJSON as GeoJSONTypeDefinition } from './typeDefs.js';
export { CountryName as CountryNameTypeDefinition } from './typeDefs.js';
export { ULID as ULIDTypeDefinition } from './typeDefs.js';
export { Cuid2 as Cuid2TypeDefinition } from './typeDefs.js';
export { GraphQLCountryName as CountryNameResolver };
export { GraphQLCountryName };
export { CountryName as CountryNameMock } from './mocks.js';
export { GraphQLGeoJSON as GeoJSONResolver };
export { GraphQLULID as ULIDResolver };
export { GraphQLCuid2 as Cuid2Resolver };
export { GraphQLGeoJSON };
export { GraphQLULID };
export { GeoJSON as GeoJSONMock } from './mocks.js';
export { Cuid2 as Cuid2Mock } from './mocks.js';
export { ULID as ULIDMock } from './mocks.js';
